// Copyright 2013 Square, Inc.

package com.squareup.timessquare;

import java.util.Calendar;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;

import com.jiyici.R;
import com.squareup.timessquare.MonthCellDescriptor.RangeState;

public class CalendarCellViewTemp extends TextView {
    
    public static interface OnCellClickedListener {
        void clickCalendar(Calendar calendar);
    }
  private static final int[] STATE_SELECTABLE = {
      R.attr.state_selectable
  };
  private static final int[] STATE_CURRENT_MONTH = {
      R.attr.state_current_month
  };
  private static final int[] STATE_TODAY = {
      R.attr.state_today
  };
  private static final int[] STATE_HIGHLIGHTED = {
      R.attr.state_highlighted
  };
  private static final int[] STATE_RANGE_FIRST = {
      R.attr.state_range_first
  };
  private static final int[] STATE_RANGE_MIDDLE = {
      R.attr.state_range_middle
  };
  private static final int[] STATE_RANGE_LAST = {
      R.attr.state_range_last
  };

  private boolean isSelectable = false;
  private boolean isCurrentMonth = false;
  private boolean isToday = false;
  private boolean isHighlighted = false;
  private RangeState rangeState = RangeState.NONE;
  

  @SuppressWarnings("UnusedDeclaration")
  public CalendarCellViewTemp(Context context, AttributeSet attrs) {
    super(context, attrs);
    cellOnClickListener = new CellOnClickListener();
    setOnClickListener(cellOnClickListener);
    
  }
  
  private CellOnClickListener cellOnClickListener;
  private Calendar calendar;
  private OnCellClickedListener onCellClickedListener;
  
  public void setCalendar(Calendar calendar) {
      this.calendar = calendar;
  }
  
  public void setOnCellClickedListener(OnCellClickedListener onCellClickedListener) {
    this.onCellClickedListener = onCellClickedListener;
  }
  
  class CellOnClickListener implements View.OnClickListener {
      View.OnClickListener wrapper;

    @Override
    public void onClick(View v) {
        if (wrapper != null) {
            wrapper.onClick(v);
        }
        if (onCellClickedListener != null) {
            onCellClickedListener.clickCalendar(calendar);
        }
    }
      
  }
  
  @Override
  public void setOnClickListener(OnClickListener l) {
      if (l instanceof CellOnClickListener) {
          super.setOnClickListener(l);
          return;
      }
      cellOnClickListener.wrapper = l;
  }

  public void setSelectable(boolean isSelectable) {
    this.isSelectable = isSelectable;
    refreshDrawableState();
  }

  public void setCurrentMonth(boolean isCurrentMonth) {
    this.isCurrentMonth = isCurrentMonth;
    refreshDrawableState();
  }

  public void setToday(boolean isToday) {
    this.isToday = isToday;
    refreshDrawableState();
  }

  public void setRangeState(MonthCellDescriptor.RangeState rangeState) {
    this.rangeState = rangeState;
    refreshDrawableState();
  }

  public void setHighlighted(boolean highlighted) {
    isHighlighted = highlighted;
  }

  @Override protected int[] onCreateDrawableState(int extraSpace) {
    final int[] drawableState = super.onCreateDrawableState(extraSpace + 5);

    if (isSelectable) {
      mergeDrawableStates(drawableState, STATE_SELECTABLE);
    }

    if (isCurrentMonth) {
      mergeDrawableStates(drawableState, STATE_CURRENT_MONTH);
    }

    if (isToday) {
      mergeDrawableStates(drawableState, STATE_TODAY);
    }

    if (isHighlighted) {
      mergeDrawableStates(drawableState, STATE_HIGHLIGHTED);
    }

    if (rangeState == MonthCellDescriptor.RangeState.FIRST) {
      mergeDrawableStates(drawableState, STATE_RANGE_FIRST);
    } else if (rangeState == MonthCellDescriptor.RangeState.MIDDLE) {
      mergeDrawableStates(drawableState, STATE_RANGE_MIDDLE);
    } else if (rangeState == RangeState.LAST) {
      mergeDrawableStates(drawableState, STATE_RANGE_LAST);
    }

    return drawableState;
  }
}
